﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using UtilityExtensions;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using BOL;
using BOL.UI;
using BOL.Cliente;
using BOL.Ventas;
using DAL;

namespace UILGestion.VentaAdmin.Proforma
{
    public partial class ProformaEditForm : System.Web.UI.Page
    {
        private string ORDENVENTAITEMINFO = "OrdenVentaItemInfo";
        public   ProformaEditForm()
        {
            _db= new dbGestionDataContext(Parametros.strConnString);
            bol = new ProformaBL();
            lista = new ListValueBL();
        }


        dbGestionDataContext  _db;
        ProformaBL bol;
        ListValueBL lista;

        [WebMethod(), ScriptMethod()]
        public static string GETUI(String prefixText, String contextKey)
        {
            //contextKey=idproyecto
            //obtenemos palabra por palabra



            var p = (from a in DbUtil.Db.UIs
                     where (a.codigo + a.descripcion).Contains(prefixText) &
                     a.idEstado == 1
                     & a.Etapa.idProyecto == contextKey.ToInt()
                     & a.Etapa.bitActivo == true
                      & (a.codigo + " " + a.descripcion).Contains(prefixText)

                     select new UISearchInfo
                     {
                         vista = string.Format("{0} /{1} /{2} /{3}  <b style='color:Blue'>{4}</b>  {5} {6:N}",
                                            a.Etapa.descripcion,
                                            a.UILocalizacion.descripcion,
                                            a.UIBloque.descripcion,
                                            a.codigo,
                                            a.descripcion, a.Moneda.simbol, a.precio),
                         idInternal = a.idInternal,
                         etapa = a.Etapa.descripcion,
                         localizacion = a.UILocalizacion.descripcion,
                         piso = a.UIBloque.descripcion,
                         codigo = a.codigo,
                         descripcion = a.descripcion,
                         moneda = a.Moneda.simbol,
                         precio = string.Format("{0:N}", a.precio),
                         separacion = string.Format("{0:N}", a.montoSeparacion),
                     }).Take(30);



            return Util.Tbl2Str(Util.EntidadToDataTable(p));

        }

        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!Page.IsPostBack)
            {
                try
                {
                    type.Value = (string)Request.QueryString["type"];
                    internalID.Value = (string)Request.QueryString["id"];
                    idProyecto.Value = (string)Request.QueryString["idProyecto"];
                    paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                    menuCtrl1.loadMenuVenta(idProyecto.Value.ToInt());
                    type.Value = (type.Value == String.Empty) ? "A" : type.Value;
                    FormatForm();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }

        private void ShowAllComboBox()
            {
              formatoVentaDDL.DataValueField="idInternal";
             formatoVentaDDL.DataTextField="descripcion";
             formatoVentaDDL.DataSource=DbUtil.Db.FormatoVentas;
             formatoVentaDDL.DataBind();


             enterasteDDL.DataValueField = "idinternal";
             enterasteDDL.DataTextField = "descripcion";
             enterasteDDL.DataSource = lista.GetComoEnterasteVenta();
             enterasteDDL.DataBind();

             monedaDDL.DataValueField = "idinternal";
             monedaDDL.DataTextField = "descripcion";
             monedaDDL.DataSource = lista.GetMoneda();
             monedaDDL.DataBind();

             bancoDDL.DataValueField = "idInternal";
             bancoDDL.DataTextField = "descripcion";
             bancoDDL.DataSource = new ListValueBL().GetBancoActivoXProyecto(idProyecto.Value.ToInt());
             bancoDDL.DataBind();
            
            


            }


        private void load()
        {
            var proforma = DbUtil.Db.Proformas.Single(p => p.idInternal == internalID.Value.ToInt());
                                 //proforma.getCorrelativo(DbUtil.Db,proforma.
            numDocumentoLBL.Text= proforma.numDocumento;
            fechaTXT.Text= proforma.fecha.ToShortDateString();
                    fechaTXT.Enabled=false;
            nombreTXT.Text=proforma.nombre;
            apellidoTXT.Text = proforma.apellido;
            dniTXT.Text=proforma.docCliente;
            direccionTXT.Text=proforma.direccion;
            telefonoTXT.Text=proforma.telefono;
            correoElectronicoTXT.Text=proforma.email;
             enterasteDDL.SelectedValue=proforma.idPregusnta1.ToString();
             celularTXT.Text = proforma.celular;
                  
            formatoVentaDDL.Text=proforma.idFormatoVenta.ToString();
            LoadItem(proforma.idInternal);
            var idUI = (string)Request.QueryString["idUI"];
            if (idUI.ToInt() != 0)
                ProformaItem1.LoadFromGrafico(idColeccion.Value.ToInt(), internalID.Value.ToInt(), idUI.ToInt());
            else
                ProformaItem1.Load(idColeccion.Value.ToInt(), internalID.Value.ToInt());


            SetEstadistica();
         
        }
        public void SetEstadistica()
        {

            DataSet ds = (DataSet)Session[idColeccion.Value];

            //lo que se esta seleccionando es de la misma moneda
            var items = (from a in ds.Tables[ORDENVENTAITEMINFO].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                       select a).AsEnumerable();
                                             
            monedaDDL.SelectedValue = items.Count() > 0 ? items.First().Field<Moneda>("moneda").idInternal.ToString() : "3";
            var formatoVenta= DbUtil.Db.FormatoVentas.Single(p=>p.idinternal==formatoVentaDDL.SelectedValue.ToInt());

            CuentaFinanciamiento cuentafinanciamiento=DbUtil.Db.CuentaFinanciamientos.Single(p=>p.idBanco==bancoDDL.SelectedValue.ToInt() & p.idProyecto==idProyecto.Value.ToInt());
             BOL.Ventas.OrdenVentaBL venta= new OrdenVentaBL();
            contadoLBL.Text=string.Empty;
            contadoTXT.Text = string.Empty;

            chLBL.Text = string.Empty;
            chTXT.Text = string.Empty;
            
            bonoTXT.Text = string.Empty;
            bonoLBL.Text = string.Empty;



            var formatoVentaCal = venta.calcularFormatoVenta(DbUtil.Db,formatoVenta,fechaTXT.Text.ToDate().Value.Year, items, cuentafinanciamiento);
            
                var uibono = _db.UIBonos.SingleOrDefault(p => p.anio == fechaTXT.Text.ToDate().Value.Year);

                if (uibono == null)
                {
                    throw new Exception("ingrese informacion del Bono para el año {0}".Fmt(fechaTXT.Text.ToDate().Value.Year));
                }


                totalTXT.Text = formatoVentaCal.total.ToString("N");
                contadoLBL.Text=formatoVenta.idinternal==1?"Contado:":"Cuota Inicial";
                                 
                contadoTXT.Text= formatoVentaCal.contado.ToString("N");
                if ( formatoVenta.bitCH)
                {
                        chLBL.Text="Credito Hipotecario";
                        chTXT.Text=formatoVentaCal.creditoHipotecario.ToString("N");
                }
                if (formatoVenta.bitBono)
                {
                        bonoLBL.Text="Bono";
                        bonoTXT.Text = uibono.valor.ToString("N");
                }
               	
              totalUPNL.Update();
            
        }

        private void FormatForm()
        {

            //--------------------
            //int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
            //    idEmpleadoEmisor,
            //    11, //Proveeedor
            //    2); //lectura
            ////------------------------- 
            //// los paneles presentes en el formulario
            //pnlMain.Visible = true;
            ShowAllComboBox();

            //areTXT.Text="0.00";
            idColeccion.Value = Parametros.GenerarID().ToString();

            if (type.Value == "E")
            {
                ImageButton3.Enabled = false;
                load();

            }
            if (type.Value == "A")
            {
                fechaTXT.Text = DateTime.Now.ToShortDateString();
                numDocumentoLBL.Text = new DAL.Proforma().getCorrelativo(DbUtil.Db, idProyecto.Value.ToInt()).ToString();
                LoadItem(0);
                var idUI = (string)Request.QueryString["idUI"];
                if (idUI.ToInt() != 0)
                    ProformaItem1.LoadFromGrafico(idColeccion.Value.ToInt(), internalID.Value.ToInt(), idUI.ToInt());
                else
                    ProformaItem1.Load(idColeccion.Value.ToInt(), internalID.Value.ToInt());


            }

        }
        private void LoadItem(int idParent)
        {
                                                                                        //solo esquema de OC
            DataTable ordenVentaItemList = Util.EntidadToDataTable(bol.GetProformaItem(idParent));

            DataSet ds = new DataSet();

            ordenVentaItemList.TableName = ORDENVENTAITEMINFO;

            ds.Tables.Add(ordenVentaItemList);
            ds.AcceptChanges();

            Session[idColeccion.Value] = ds;
        }
        protected void button(object sender, EventArgs e)
        {
            try
            {

           

            if (((Button)sender).ID==saveBTN.ID)
            {
                DataSet ds = (DataSet)Session[idColeccion.Value];
                if (type.Value == "A")
                {

                   
                    internalID.Value = bol.Add(
                      fechaTXT.Text.ToDate().Value,
                      idProyecto.Value.ToInt(),
                      nombreTXT.Text,
                      dniTXT.Text,
                      apellidoTXT.Text,
                      direccionTXT.Text,
                      telefonoTXT.Text,
                      celularTXT.Text,
                      correoElectronicoTXT.Text,
                      formatoVentaDDL.SelectedValue.ToInt(),
                      bancoDDL.SelectedValue.ToInt(),
                      monedaDDL.SelectedValue.ToInt(),
                      ds,
                      enterasteDDL.SelectedValue.ToInt(),
                      ObservacionFinTXT.Text,
                                   ObservacionFinTXT.Text,
                                   tipoIngresoTXT.Text).ToString();

                }
                if (type.Value == "E")
                {

                     bol.Update(internalID.Value.ToInt(),
                      nombreTXT.Text,
                      dniTXT.Text,
                      apellidoTXT.Text,
                      direccionTXT.Text,
                      telefonoTXT.Text,
                      celularTXT.Text,
                      correoElectronicoTXT.Text,
                      formatoVentaDDL.SelectedValue.ToInt(),
                      bancoDDL.SelectedValue.ToInt(),
                      monedaDDL.SelectedValue.ToInt(),
                      enterasteDDL.SelectedValue.ToInt(),
                      ObservacionFinTXT.Text,
                                   ObservacionFinTXT.Text,
                                   tipoIngresoTXT.Text,
                      ds);
                }


                Response.Redirect("~/VentaAdmin/Proforma/ProformaReadForm.aspx?id={0}&idProyecto={1}".Fmt(internalID.Value, idProyecto.Value.ToInt()), true);

            }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        protected void formatoVentaDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //actualizo los valores si caso es idfinanciado
                DataSet ds = (DataSet)Session[idColeccion.Value];
                foreach (var item in ds.Tables[ORDENVENTAITEMINFO].AsEnumerable().Where(p=>p.RowState!= DataRowState.Deleted))
                {
                    if (DbUtil.Db.UIs.Single(p => p.idInternal == item.Field<int>("idUI")).UITipo.bitCH == true)
                    {
                        item["bitFinanciado"] = true;
                    }
                    else
                    {
                        item["bitFinanciado"] = false;
                    }
                    
                }

                Session[idColeccion.Value] = ds;
                ProformaItem1.BindDataItem();     
                SetEstadistica();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
            
        }

        protected void bancoDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                 SetEstadistica();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
           
        }
    }
}